package com.example.redistemplate;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;

/**
 *    自定义RedisTemplate的序列化方式
 *
 *    Key和HashKey使用字符串，一般使用StringSerializer
 *    Value有可能是对象使用GenericJackson2JsonRedisSerializer   //转JSON字符串的序列化工具
 *
 *    一般Key使用String类型序列化，Value一般使用转Json字符串序列化
 *
 */
@Configuration
public class RedisConfig {

    //springboot会自动创建RedisConnectionFactory连接工厂
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){

        //创建RedisTemplate对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        //设置连接工厂
        template.setConnectionFactory(factory);
        //创建JSON序列化工具
        GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
        //设置Key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        //设置Value的序列化
        template.setValueSerializer(serializer);
        template.setHashValueSerializer(serializer);
        //返回
        return template;
    }

}
